import os
import subprocess
import win32com.client
import pythoncom
from sw_server import get_sw_app, get_swmodel

def open_current_sw_document_folder():
    """
    打开当前SolidWorks活动文档所在的文件夹
    """
    try:
        # 获取SolidWorks应用程序实例
        sw_app = get_sw_app()
        if not sw_app:
            print("❌ 请先启动 SolidWorks")
            return False
            
        # 获取当前活动文档
        active_doc = sw_app.ActiveDoc
        if active_doc is None:
            print("⚠️ 当前没有打开的文档")
            return False
            
        # 获取文档的完整路径
        doc_path = active_doc.GetPathName
        if not doc_path or doc_path == "":
            print("⚠️ 当前文档未保存，无法确定文件位置")
            return False
            
        # 检查文件是否存在
        if not os.path.exists(doc_path):
            print(f"⚠️ 文件不存在: {doc_path}")
            return False
            
        # 打开文件所在的文件夹并选中该文件
        subprocess.run(['explorer', '/select,', doc_path], check=True)
        print(f"✅ 已在资源管理器中打开文件夹并选中文件: {os.path.basename(doc_path)}")
        return (f"✅ 已在资源管理器中打开文件夹并选中文件: {os.path.basename(doc_path)}")
        
    except subprocess.CalledProcessError as e:
        print(f"❌ 无法打开文件夹: {e}")
        return (f"❌ 无法打开文件夹: {e}")
    except Exception as e:
        print(f"❌ 操作失败: {e}")
        return (f"❌ 操作失败: {e}")

def open_sw_part_folder(part_name, base_path=r"solidworksdata\一体式油水分离器"):
    """
    打开指定SolidWorks零件文件所在的文件夹
    
    :param part_name: 零件名称（不包含扩展名）
    :param base_path: 基础路径
    """
    try:
        # 构建零件文件完整路径
        part_name = part_name.strip()
        part_file = f"{part_name}.sldprt"
        full_path = os.path.join(base_path, part_file)
        full_path = os.path.abspath(full_path)
        
        # 检查文件是否存在
        if not os.path.exists(full_path):
            print(f"⚠️ 零件文件不存在: {full_path}")
            return False
            
        # 打开文件夹并选中该文件
        subprocess.run(['explorer', '/select,', full_path], check=True)
        print(f"✅ 已在资源管理器中打开零件文件夹并选中: {part_file}")
        return True
        
    except subprocess.CalledProcessError as e:
        print(f"❌ 无法打开文件夹: {e}")
        return False
    except Exception as e:
        print(f"❌ 操作失败: {e}")
        return False

# 使用示例（可选添加到 __main__ 部分）
if __name__ == "__main__":
    # 打开当前SolidWorks文档所在的文件夹
    open_current_sw_document_folder()